package com.my.model;


import cn.hutool.core.util.IdUtil;
import com.github.wxpay.sdk.WXPayUtil;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import lombok.extern.slf4j.Slf4j;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

/**
 * 微信支付控制层
 * @author shuqingyou 2022/9/17
 */
@RestController
@RequestMapping(value = "/WeiXinPayController")
@Slf4j
public class WeiXinPayController {
    @Resource
    private PayProperties payProperties;

    /**
     * 微信支付 统一预下单接口
     * @author shuqingyou 2022/9/17
     */
    @RequestMapping(value = "/createNative")
    public Map<String, Object> createNative(HttpServletRequest request) {
        Map<String, Object> ResultMap = new HashMap<String, Object>();
        try {
            WeChatPay weChatPay = new WeChatPay();
            weChatPay.setAppid(payProperties.getAppid())//公众号appid
                    .setMch_id(payProperties.getMch_id()) // 商户号
                    .setApi_key(payProperties.getApi_key())//api密钥
                    .setNonce_str(WXPayUtil.generateNonceStr())// 32位随机字符串
                    .setBody("小米MIX3 12+568国行陶瓷黑")// 商品描述
                    .setTotal_fee("0.01") //标价金额
                    .setOut_trade_no(IdUtil.simpleUUID())// 商户订单号 唯一
                    .setSpbill_create_ip(WxChatPayCommonUtil.getIp(request))// 终端IP
                    .setNotify_url("https://www.baidu.com")//异步回调地址
                    .setTrade_type("NATIVE") // 交易类型 JSAPI--JSAPI支付（或小程序支付）、NATIVE--Native支付、APP--app支付，MWEB--H5支付
                    .setSub_mch_id("1609469848")//子商户号 微信支付 分配的子商户号（服务商模式的时候填入）
                    .setAttach("shuqingyou");//附加数据，在查询API和支付通知中原样返回，该字段主要用于商户携带订单的自定义数据
            return WeChatPayService.Unifiedorder(weChatPay);
        } catch (Exception e) {
            ResultMap.put("code", 2);
            ResultMap.put("msg", "系统异常错误代码：" + e.getMessage());
            e.printStackTrace();
        }
        return ResultMap;
    }

    /**
     * 查询微信订单交易状态
     * @author shuqingyou 2022/9/17
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value = "/QueryPayStatus")
    @ResponseBody
    public Map<String, Object> QueryPayStatus(HttpServletRequest request, HttpServletResponse response) {
        Map<String, Object> ResultMap = new HashMap<String, Object>();
        try {
            //todo // 商户订单号 唯一
            String out_trade_no = request.getParameter("out_trade_no");
            WeChatPay weChatPay = new WeChatPay();
            weChatPay.setAppid(payProperties.getAppid())//公众号appid
                    .setMch_id(payProperties.getMch_id()) // 商户号
                    .setApi_key(payProperties.getApi_key())//api密钥
                    .setNonce_str(WXPayUtil.generateNonceStr())// 32位随机字符串
                    .setOut_trade_no(out_trade_no)// 商户订单号 唯一
                    .setSub_mch_id("1609469848");//子商户号 微信支付 分配的子商户号（服务商模式的时候填入）

            /**查询订单交易状态**/
            return WeChatPayService.QueryPayStatus(weChatPay);
        } catch (Exception e) {
            ResultMap.put("code", 2);
            ResultMap.put("msg", "系统异常错误代码：" + e.getMessage());
            e.printStackTrace();
        }
        return ResultMap;
    }

}